/*
 * $HeadURL: $
 * $Id: $
 * Copyright (c) 2013 by Wodensoft System, all rights reserved.
 */
package com.wodensoft.core.exception;

import java.util.Arrays;
import java.util.List;

/**
 * 异常类型枚举
 * 
 * @author wodenwang
 * 
 */
@SuppressWarnings("unchecked")
public enum ExceptionType {

    /**
     * 默认异常
     */
    DEFAULT(9900, "系统未知异常。"),
    /**
     * 数据库异常
     */
    DB(100, "数据库错误。"), DB_INSERT(101, "数据库主键重复。"),

    /**
     * web层异常
     */
    WEB(200, "页面异常。"),

    /**
     * 上下文属性异常
     */
    CONTEXT(300, "上下文属性异常。"), CONTEXT_EMPTY(301, "属性不存在。"),

    /**
     * 脚本执行属性异常
     */
    SCRIPT(400, "脚本执行异常。"), SCRIPT_ATTRIBUTE_EMPTY(401, "属性不存在。"), SCRIPT_METHOD_EMPTY(402, "方法不存在。"),
    SCRIPT_COMPILE_ERROR(403, "脚本编译出错。"),
    
    ;
    /**
     * 异常码，格式如：100,1203.<br>
     * 前两位为类型编码，后两位为明细编码。如：100表示数据库类型异常，101表示数据库新增异常。
     */
    private int code;
    /**
     * 通用提示信息。
     */
    private String msg;
    /**
     * 异常类型匹配。FIXME <br>
     * 考虑使用类名正则匹配，如DataAccess*Exception之类。
     */
    private List<Class<Exception>> clss;

    /**
     * 枚举构造
     * 
     * @param code
     * @param msg
     * @param clss
     */
    private ExceptionType(int code, String msg, Class<Exception>... clss) {
        this.code = code;
        this.msg = msg;
        this.clss = Arrays.asList(clss);
    }

}
